<!DOCTYPE html>
<html lang="zh-CN" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>第1章 核心模块与应用场景</title>
    <meta name="description" content="CodeArtist Docs">
    <meta name="generator" content="VitePress v1.1.0">
    <link rel="preload stylesheet" href="/assets/style.DFG07-Zc.css" as="style">
    
    <script type="module" src="/assets/app.pltQkKYQ.js"></script>
    <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
    <link rel="modulepreload" href="/assets/chunks/framework.BF7kEGuD.js">
    <link rel="modulepreload" href="/assets/chunks/theme.DFPcQr-U.js">
    <link rel="modulepreload" href="/assets/spring_1.md.C9qGqpMC.lean.js">
    <link rel="icon" href="/icons/logo.svg">
    <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
    <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar has-sidebar top" data-v-ae24b3ad data-v-ccf7ddec><div class="wrapper" data-v-ccf7ddec><div class="container" data-v-ccf7ddec><div class="title" data-v-ccf7ddec><div class="VPNavBarTitle has-sidebar" data-v-ccf7ddec data-v-ab179fa1><a class="title" href="/" data-v-ab179fa1><!--[--><!--]--><!--[--><img class="VPImage logo" src="/icons/logo.svg" alt data-v-8426fc1a><!--]--><span data-v-ab179fa1>CodeArtist - 码匠</span><!--[--><!--]--></a></div></div><div class="content" data-v-ccf7ddec><div class="content-body" data-v-ccf7ddec><!--[--><!--]--><div class="VPNavBarSearch search" data-v-ccf7ddec><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">搜索文档</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-ccf7ddec data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/spring/" tabindex="0" data-v-7f418b0f data-v-9c663999><!--[--><span data-v-9c663999>Spring</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-ccf7ddec data-v-e6aabb21><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-e6aabb21 data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-ccf7ddec data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/ArtistOfCode" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-ccf7ddec data-v-d0bd9dde data-v-b6c34ac9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-b6c34ac9><span class="vpi-more-horizontal icon" data-v-b6c34ac9></span></button><div class="menu" data-v-b6c34ac9><div class="VPMenu" data-v-b6c34ac9 data-v-e7ea1737><!----><!--[--><!--[--><!----><div class="group" data-v-d0bd9dde><div class="item appearance" data-v-d0bd9dde><p class="label" data-v-d0bd9dde>主题</p><div class="appearance-action" data-v-d0bd9dde><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-d0bd9dde data-v-d1f28634 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-d1f28634></span><span class="vpi-moon moon" data-v-d1f28634></span><!--]--></span></span></button></div></div></div><div class="group" data-v-d0bd9dde><div class="item social-links" data-v-d0bd9dde><div class="VPSocialLinks social-links-list" data-v-d0bd9dde data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/ArtistOfCode" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-eee4e7cb><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-ccf7ddec data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-ccf7ddec><div class="divider-line" data-v-ccf7ddec></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>目录</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-267dd0ed><button data-v-267dd0ed>返回顶部</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-575e6a36><div class="curtain" data-v-575e6a36></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-575e6a36><span class="visually-hidden" id="sidebar-aria-label" data-v-575e6a36> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-575e6a36><section class="VPSidebarItem level-0 has-active" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><h2 class="text" data-v-b8d55f3b>基础核心技术</h2><!----></div><div class="items" data-v-b8d55f3b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/1.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>1. 核心模块与应用场景</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/2.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>2. 基于XML配置的容器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/3.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>3. 基于注解配置的容器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/4.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>4. 基于Java配置的容器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/5.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>5. 三种方式的混合和迁移</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/6.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>6. 同类型多个Bean的注入</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/7.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>7. Bean的生命周期和扩展点</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/8.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>8. 环境抽象</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/9.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>9. 事件机制</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/10.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>10. 资源管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/11.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>11. 数据验证</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/12.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>12. 数据绑定</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/13.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>13. 类型转换</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b8d55f3b data-v-b8d55f3b><div class="item" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><a class="VPLink link link" href="/spring/14.html" data-v-b8d55f3b><!--[--><p class="text" data-v-b8d55f3b>14. SpEL表达式</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>面向切面编程</p><!----></div><!----></div></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>数据访问和事务管理</p><!----></div><!----></div></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>Web Servlet应用</p><!----></div><!----></div></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>Web Reactive应用</p><!----></div><!----></div></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>单元测试和集成测试</p><!----></div><!----></div></div><div class="group" data-v-575e6a36><div class="VPSidebarItem level-0" data-v-575e6a36 data-v-b8d55f3b><div class="item" role="button" tabindex="0" data-v-b8d55f3b><div class="indicator" data-v-b8d55f3b></div><p class="text" data-v-b8d55f3b>其他组件</p><!----></div><!----></div></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-3f215769 data-v-935f8a84><div class="content" data-v-935f8a84><div class="outline-marker" data-v-935f8a84></div><div class="outline-title" role="heading" aria-level="2" data-v-935f8a84>页面导航</div><nav aria-labelledby="doc-outline-aria-label" data-v-935f8a84><span class="visually-hidden" id="doc-outline-aria-label" data-v-935f8a84> Table of Contents for current page </span><ul class="VPDocOutlineItem root" data-v-935f8a84 data-v-b933a997><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _spring_1" data-v-39a288b8><div><h1 id="第1章-核心模块与应用场景" tabindex="-1">第1章 核心模块与应用场景 <a class="header-anchor" href="#第1章-核心模块与应用场景" aria-label="Permalink to &quot;第1章 核心模块与应用场景&quot;">​</a></h1><p>Spring 框架可以为 Java 应用程序开发提供全面的基础设施支持，它是现在非常流行的 Java 开源框架，对于一个 Java 开发人员来说，熟练掌握 Spring 是必不可少的。</p><p><strong>控制反转（IoC）和依赖注入（DI）</strong></p><p>IoC/DI 是 Spring 的核心设计模式，它的所有组件和功能，都是基于这一模式设计的。IoC 意味着你设计好的对象交给容器控制，而不是在你的对象内部直接控制，而各个对象之间的依赖关系，是在容器运行期间决定的，容器动态地将依赖关系注入到组件中，且不关心具体的对象或资源来自何处，这大大降低了对象间的耦合度。</p><h2 id="一、spring模块" tabindex="-1">一、Spring模块 <a class="header-anchor" href="#一、spring模块" aria-label="Permalink to &quot;一、Spring模块&quot;">​</a></h2><p>Spring 框架的模块：</p><p><img src="/images/spring/1/1.svg#svg-dark" alt="spring overview" loading="lazy"></p><h3 id="_1-核心模块" tabindex="-1">1. 核心模块 <a class="header-anchor" href="#_1-核心模块" aria-label="Permalink to &quot;1. 核心模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-core</code></td><td>提供 IoC 和 DI 等功能</td></tr><tr><td><code>spring-beans</code></td><td>提供 Bean 容器等功能</td></tr><tr><td><code>spring-context</code></td><td>基于 core 和 beans 模块构建，扩展了功能</td></tr><tr><td><code>spring-context-support</code></td><td>支持整合第三方工具</td></tr><tr><td><code>spring-expression</code></td><td>提供 SpEL 表达式支持</td></tr></tbody></table><h3 id="_2-aop模块" tabindex="-1">2. AOP模块 <a class="header-anchor" href="#_2-aop模块" aria-label="Permalink to &quot;2. AOP模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-aop</code></td><td>提供 AOP（面向切面编程）支持</td></tr><tr><td><code>spring-aspects</code></td><td>提供 AspectJ 的集成</td></tr><tr><td><code>spring-instrumentation</code></td><td>提供类植入和类加载器的实现</td></tr></tbody></table><h3 id="_3-消息模块" tabindex="-1">3. 消息模块 <a class="header-anchor" href="#_3-消息模块" aria-label="Permalink to &quot;3. 消息模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-messaging</code></td><td>提供消息功能支持</td></tr></tbody></table><h3 id="_4-数据访问模块" tabindex="-1">4. 数据访问模块 <a class="header-anchor" href="#_4-数据访问模块" aria-label="Permalink to &quot;4. 数据访问模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-jdbc</code></td><td>提供 JDBC 抽象层来代替原生 JDBC 功能</td></tr><tr><td><code>spring-tx</code></td><td>提供编程式和声明式事务管理</td></tr><tr><td><code>spring-orm</code></td><td>提供主流的 ORM 框架 API 支持</td></tr><tr><td><code>spring-oxm</code></td><td>提供支持对象/XML映射抽象层</td></tr><tr><td><code>spring-jms</code></td><td>提供支持生产和消费的消息功能</td></tr></tbody></table><h3 id="_5-web模块" tabindex="-1">5. Web模块 <a class="header-anchor" href="#_5-web模块" aria-label="Permalink to &quot;5. Web模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-web</code></td><td>提供 Web 功能支持</td></tr><tr><td><code>spring-webmvc</code></td><td>提供 Web 应用程序的 MVC 和 REST Web Services 支持</td></tr><tr><td><code>spring-websocket</code></td><td>提供 Web Socket 支持</td></tr></tbody></table><h3 id="_6-测试模块" tabindex="-1">6. 测试模块 <a class="header-anchor" href="#_6-测试模块" aria-label="Permalink to &quot;6. 测试模块&quot;">​</a></h3><table><thead><tr><th>名称</th><th>功能</th></tr></thead><tbody><tr><td><code>spring-test</code></td><td>提供 JUnit 或 TestNG 等主流单元测试框架的集成</td></tr></tbody></table><h2 id="二、集成功能" tabindex="-1">二、集成功能 <a class="header-anchor" href="#二、集成功能" aria-label="Permalink to &quot;二、集成功能&quot;">​</a></h2><p>Spring 对一些常用的功能组件都会基于 IoC/DI 模式来进行封装，简化其使用方式，以便开发人员开箱即用，不仅可以提高开发效率，还降低了耦合，提高了测试性和可移植性。</p><h3 id="_1-目标原则" tabindex="-1">1. 目标原则 <a class="header-anchor" href="#_1-目标原则" aria-label="Permalink to &quot;1. 目标原则&quot;">​</a></h3><p>目标：</p><ul><li>为复杂的企业集成解决方案提供简单的模型</li><li>便于开发基于异步、消息驱动行为的应用</li><li>使现有 Spring 用户更直观、更循序渐进地使用</li></ul><p>原则：</p><ul><li>降低组件的耦合度，增加了模块化和可测试性</li><li>强制区分业务逻辑和组件集成逻辑</li><li>扩展点是抽象的，增加了扩展性和可移植性</li></ul><h3 id="_2-支持组件" tabindex="-1">2. 支持组件 <a class="header-anchor" href="#_2-支持组件" aria-label="Permalink to &quot;2. 支持组件&quot;">​</a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>Endpoint</span></span>
<span class="line"><span>AMQP</span></span>
<span class="line"><span>Spring ApplicationEvent</span></span>
<span class="line"><span>File </span></span>
<span class="line"><span>FTP/FTPS Adapters</span></span>
<span class="line"><span>HTTP</span></span>
<span class="line"><span>JDBC</span></span>
<span class="line"><span>JPA</span></span>
<span class="line"><span>JMS</span></span>
<span class="line"><span>Mail</span></span>
<span class="line"><span>MongoDb</span></span>
<span class="line"><span>MQTT</span></span>
<span class="line"><span>Redis</span></span>
<span class="line"><span>Resource</span></span>
<span class="line"><span>RMI</span></span>
<span class="line"><span>RSocket</span></span>
<span class="line"><span>SFTP Adapters</span></span>
<span class="line"><span>STOMP</span></span>
<span class="line"><span>Stream</span></span>
<span class="line"><span>Syslog</span></span>
<span class="line"><span>TCP and UDP</span></span>
<span class="line"><span>WebFlux</span></span>
<span class="line"><span>WebSockets</span></span>
<span class="line"><span>Web Services</span></span>
<span class="line"><span>XML</span></span>
<span class="line"><span>Zookeeper</span></span></code></pre></div><h2 id="三、应用场景" tabindex="-1">三、应用场景 <a class="header-anchor" href="#三、应用场景" aria-label="Permalink to &quot;三、应用场景&quot;">​</a></h2><p>Spring 框架由多个模块构成，它不是一个全有或者全无的解决方案，我们完全可以按照需求使用它的全部或者部分特性。</p><h3 id="_1-典型完整的-spring-web-应用程序" tabindex="-1">1. 典型完整的 Spring Web 应用程序 <a class="header-anchor" href="#_1-典型完整的-spring-web-应用程序" aria-label="Permalink to &quot;1. 典型完整的 Spring Web 应用程序&quot;">​</a></h3><p><img src="/images/spring/1/overview-full.png" alt="overview full" loading="lazy"></p><p>Spring 完整使用场景：基于 Tomcat Servlet 容器，Web 层、业务层和数据持久层都使用 Spring 模块实现。</p><h3 id="_2-使用第三方-web-框架的应用程序" tabindex="-1">2. 使用第三方 Web 框架的应用程序 <a class="header-anchor" href="#_2-使用第三方-web-框架的应用程序" aria-label="Permalink to &quot;2. 使用第三方 Web 框架的应用程序&quot;">​</a></h3><p><img src="/images/spring/1/overview-thirdparty-web.png" alt="overview thirdparty web" loading="lazy"></p><p>整合第三方 Web 框架：基于 Tomcat Servlet 容器，Web 层使用 Struts 等其他框架，业务层和数据持久层都使用 Spring 模块实现。</p><h3 id="_3-基于-rpc-的应用程序" tabindex="-1">3. 基于 RPC 的应用程序 <a class="header-anchor" href="#_3-基于-rpc-的应用程序" aria-label="Permalink to &quot;3. 基于 RPC 的应用程序&quot;">​</a></h3><p><img src="/images/spring/1/overview-remoting.png" alt="overview remoting" loading="lazy"></p><p>RPC 应用程序：基于 Tomcat Servlet 容器，使用Spring的 Hessian-，Rmi- 或HttpInvokerProxyFactoryBean 类构建远程调用程序。</p><h3 id="_4-基于-ejb-的应用程序" tabindex="-1">4. 基于 EJB 的应用程序 <a class="header-anchor" href="#_4-基于-ejb-的应用程序" aria-label="Permalink to &quot;4. 基于 EJB 的应用程序&quot;">​</a></h3><p><img src="/images/spring/1/overview-ejb.png" alt="overview ejb" loading="lazy"></p><p>EJB 应用程序：Spring 提供访问层和抽象层来管理 EJB。</p><p>比如我们通常使用的 SSM 框架和 SSH 框架就是 Spring 框架和第三方框架的组合形式：</p><table><thead><tr><th></th><th>Web 层</th><th>业务层</th><th>数据持久层</th></tr></thead><tbody><tr><td>SSM</td><td>SpringMVC</td><td>Spring</td><td>MyBatis</td></tr><tr><td>SSH</td><td>Struts</td><td>Spring</td><td>Hibernate</td></tr></tbody></table><p>不管我们怎么搭建应用程序框架，Spring 都能很好的集成到我们应用程序中。</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-09de1c0f><!--[--><!--[--><!--[--><!--[--><img src="/images/wechat.png" alt="wechat" style="margin-bottom:64px;"><!--]--><!--]--><!--]--><!--]--><div class="edit-info" data-v-09de1c0f><div class="edit-link" data-v-09de1c0f><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/ArtistOfCode/artistofcode.github.com" target="_blank" rel="noreferrer" data-v-09de1c0f><!--[--><span class="vpi-square-pen edit-link-icon" data-v-09de1c0f></span> 在GitHub上编辑此页面<!--]--></a></div><div class="last-updated" data-v-09de1c0f><p class="VPLastUpdated" data-v-09de1c0f data-v-7e05ebdb>最后修改: <time datetime="2024-04-09T14:10:13.000Z" data-v-7e05ebdb></time></p></div></div><nav class="prev-next" data-v-09de1c0f><div class="pager" data-v-09de1c0f><!----></div><div class="pager" data-v-09de1c0f><a class="VPLink link pager-link next" href="/spring/2.html" data-v-09de1c0f><!--[--><span class="desc" data-v-09de1c0f>下一页</span><span class="title" data-v-09de1c0f>2. 基于XML配置的容器</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>Released under the MIT License.</p><p class="copyright" data-v-e315a0ad>Copyright © 2017-present CodeArtist</p></div></footer><!--[--><!--]--></div></div>
    <script>window.__VP_HASH_MAP__=JSON.parse("{\"outline_index.md\":\"D7H6uBD-\",\"spring_1.md\":\"C9qGqpMC\",\"index.md\":\"B1BWkwCt\",\"spring_12.md\":\"BC-TPq8H\",\"spring_10.md\":\"DY2yBdIu\",\"about.md\":\"CvrawqAK\",\"spring_11.md\":\"k6Qna_DW\",\"spring_13.md\":\"Ch8gztRG\",\"spring_2.md\":\"B-V79Qs9\",\"spring_14.md\":\"CGeeIeNb\",\"spring_15.md\":\"DuHLBP8w\",\"spring_3.md\":\"BMBow6-k\",\"spring_4.md\":\"DB9BOcJw\",\"spring_5.md\":\"Dy3RHakk\",\"spring_6.md\":\"B1YQToG4\",\"spring_7.md\":\"rYe5LBaz\",\"spring_index.md\":\"CvJgAHjR\",\"spring_9.md\":\"DwNDcMld\",\"spring_8.md\":\"Dv44ALP7\",\"spring_第12章-spring基于注解配置aop.md\":\"CBTaghhm\",\"start.md\":\"CU4Hzrbs\",\"spring_第14章-spring aop通知（advice）详解.md\":\"LGuUnHAP\",\"team.md\":\"BAUwSa2D\",\"spring_第16章-spring aop中的基础api.md\":\"CbmR_gCB\",\"spring_第13章-spring基于xml配置aop.md\":\"DNaLB8VY\",\"spring_第15章-spring aop切点表达式（pointcut）详解.md\":\"CRi-Jn_0\",\"spring_第17章-spring aop经典应用场景.md\":\"CoSzh2QA\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"CodeArtist - 码匠\",\"titleTemplate\":\":title\",\"description\":\"CodeArtist Docs\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/icons/logo.svg\",\"outline\":{\"label\":\"页面导航\",\"level\":[2,3]},\"editLink\":{\"text\":\"在GitHub上编辑此页面\",\"pattern\":\"https://github.com/ArtistOfCode/artistofcode.github.com\"},\"nav\":[{\"text\":\"Spring\",\"link\":\"/spring/\"}],\"sidebar\":{\"/spring\":[{\"text\":\"基础核心技术\",\"base\":\"/spring\",\"items\":[{\"text\":\"1. 核心模块与应用场景\",\"link\":\"/1\"},{\"text\":\"2. 基于XML配置的容器\",\"link\":\"/2\"},{\"text\":\"3. 基于注解配置的容器\",\"link\":\"/3\"},{\"text\":\"4. 基于Java配置的容器\",\"link\":\"/4\"},{\"text\":\"5. 三种方式的混合和迁移\",\"link\":\"/5\"},{\"text\":\"6. 同类型多个Bean的注入\",\"link\":\"/6\"},{\"text\":\"7. Bean的生命周期和扩展点\",\"link\":\"/7\"},{\"text\":\"8. 环境抽象\",\"link\":\"/8\"},{\"text\":\"9. 事件机制\",\"link\":\"/9\"},{\"text\":\"10. 资源管理\",\"link\":\"/10\"},{\"text\":\"11. 数据验证\",\"link\":\"/11\"},{\"text\":\"12. 数据绑定\",\"link\":\"/12\"},{\"text\":\"13. 类型转换\",\"link\":\"/13\"},{\"text\":\"14. SpEL表达式\",\"link\":\"/14\"}]},{\"text\":\"面向切面编程\",\"base\":\"/spring\",\"items\":[]},{\"text\":\"数据访问和事务管理\",\"base\":\"/spring\",\"items\":[]},{\"text\":\"Web Servlet应用\",\"base\":\"/spring\",\"items\":[]},{\"text\":\"Web Reactive应用\",\"base\":\"/spring\",\"items\":[]},{\"text\":\"单元测试和集成测试\",\"base\":\"/spring\",\"items\":[]},{\"text\":\"其他组件\",\"base\":\"/spring\",\"items\":[]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/ArtistOfCode\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2017-present CodeArtist\"},\"outlineTitle\":\"目录\",\"sidebarMenuLabel\":\"目录\",\"darkModeSwitchLabel\":\"主题\",\"returnToTopLabel\":\"返回顶部\",\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"lastUpdated\":{\"text\":\"最后修改\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"short\",\"hourCycle\":\"h24\"}},\"search\":{\"provider\":\"local\",\"options\":{\"locales\":{\"root\":{\"placeholder\":\"搜索文档\",\"translations\":{\"button\":{\"buttonText\":\"搜索文档\"},\"modal\":{\"displayDetails\":\"显示详情列表\",\"resetButtonTitle\":\"清除查询条件\",\"noResultsText\":\"无法找到相关结果\",\"footer\":{\"selectText\":\"选择\",\"navigateText\":\"切换\",\"closeText\":\"关闭\",\"searchByText\":\"搜索提供者\"}}}}}}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
    
  </body>
</html>